UI_NDBI – Urban Index (NDBI-based)
UI_NDBI is an urban / built-up intensity index derived from the classic NDBI formulation. It compares SWIR and NIR reflectance to highlight built-up areas and suppress vegetation and water.
What does UI_NDBI measure?
UI_NDBI enhances the separation between urban / built-up surfaces and other land-cover classes by exploiting the higher SWIR reflectance of impervious materials compared with vegetation and water.
- Mapping built-up / impervious surfaces inside and around cities.
- Monitoring urban expansion and sprawl over time.
- Supporting urban heat-island and land-surface temperature studies.
- Pre-classification mask for detailed land-use / land-cover mapping.
UI_NDBI formula
UI_NDBI = (SWIR - NIR) / (SWIR + NIR)
Values are typically in the range −1 to +1. Built-up areas tend to show positive UI_NDBI, while vegetation and water usually appear with negative values.
UI_NDBI = (B5 - B4) / (B5 + B4)
Where B5 = SWIR1, B4 = NIR.
UI_NDBI = (B6 - B5) / (B6 + B5)
Where B6 = SWIR1, B5 = NIR.
UI_NDBI = (B11 - B8) / (B11 + B8)
B11 = SWIR, B8 = NIR (10 m).
Always check band naming and scale factors for the collection you use in Google Earth Engine.
Required bands
Sensors & spectral bands
| Sensor | NIR | SWIR |
|---|---|---|
| Landsat 5 TM / 7 ETM+ | B4 | B5 |
| Landsat 8 / 9 OLI | B5 | B6 |
| Sentinel-2 MSI | B8 | B11 |
Tip: resample SWIR to match NIR spatial resolution where needed (e.g. Sentinel-2 20 m → 10 m) before combining in UI_NDBI.
Typical value ranges
| Land-cover type | UI_NDBI trend |
|---|---|
| Dense built-up / impervious | High positive (> 0.2) |
| Mixed urban / vegetation | Around 0 to 0.2 |
| Vegetation | Negative (< 0) |
| Water | Strongly negative |
Ranges are indicative and depend on sensor, season, and atmospheric conditions. Always validate with reference data.
Using UI_NDBI in Google Earth Engine
- Select a surface-reflectance collection (e.g. Landsat 8/9 SR).
- Filter by date, cloud cover, and region of interest.
- Add a new band computed with the UI_NDBI formula.
- Visualize the index and export it if needed.
// UI_NDBI example for Landsat 8/9 in Google Earth Engine
var roi = /* your geometry here */;
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterBounds(roi)
.filterDate('2023-01-01', '2023-12-31')
.filter(ee.Filter.lt('CLOUD_COVER', 20))
.map(function(img) {
// Apply scale factors
var optical = img.select(['SR_B.']).multiply(0.0000275).add(-0.2);
var nir = optical.select('SR_B5');
var swir = optical.select('SR_B6');
var ui_ndbi = swir.subtract(nir).divide(swir.add(nir))
.rename('UI_NDBI');
return img.addBands(ui_ndbi);
});
var uiImage = collection.median().select('UI_NDBI');
// Visualisation: highlight built-up areas
Map.centerObject(roi, 10);
Map.addLayer(uiImage, {min: -0.4, max: 0.6, palette: ['#0b1120','#22c55e','#fde047','#f97316']}, 'UI_NDBI');
Important: adjust collection ID, band names, scale factors, and date range to match your project and sensor.